﻿using QuanLyThuVien.DTO;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using QuanLyThuVien.Supporter;
using System.Data.SqlClient;

namespace QuanLyThuVien.DAL
{
    //----------------------------------------------------------------------
    //Desc: class kết nối với bảng THELOAI
    //----------------------------------------------------------------------
    public class DALTheLoai
    {
        //----------------------------------------------------------------------
        //Desc: constructor mặc định
        //----------------------------------------------------------------------
        public DALTheLoai()
        { }

        //----------------------------------------------------------------------
        //Desc: chuyển dòng dữ liệu thành THELOAI
        //----------------------------------------------------------------------
        public DTOTheLoai ConvertToTLSach(DataRow row)
        {
            DTOTheLoai tlSach = new DTOTheLoai();
            tlSach.MaTheLoai = row["MaTheLoai"].ToString();
            tlSach.TenTheLoai = row["TenTheLoai"].ToString();

            return tlSach;
        }

        //----------------------------------------------------------------------
        //Desc: lấy danh sách thể loại
        //----------------------------------------------------------------------
        public List<DTOTheLoai> LayDSTheLoai()
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spTheLoai_LayDanhSachTL";
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
            if (data == null)
                return null;
            else
            {
                List<DTOTheLoai> list = new List<DTOTheLoai>();
                for (int i = 0; i < data.Rows.Count; i++)
                    list.Add(ConvertToTLSach(data.Rows[i]));
                return list;
            }
        }

        //----------------------------------------------------------------------
        //Desc: lấy danh sách thể loại trả về datatable
        //----------------------------------------------------------------------
        public DataTable LayDanhSachTheLoai()
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spTheLoai_LayDanhSachTL";
            return DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
        }

        //----------------------------------------------------------------------
        //Desc: lấy thông tin thể loại
        //----------------------------------------------------------------------
        public DTOTheLoai LayThongTinTL(string matheloai)
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spTheLoai_LayThongTinTL";
            SqlParameter sqlprMaTheLoai = new SqlParameter("@MaTheLoai", SqlDbType.VarChar, 15) { Value = matheloai };
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName, sqlprMaTheLoai);
            if (data == null || data.Rows.Count == 0)
                return null;
            return ConvertToTLSach(data.Rows[0]);
        }

        //----------------------------------------------------------------------
        //Desc: lấy tên thể loại
        //----------------------------------------------------------------------
        public string LayTenTheLoai(string matheloai)
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spTheLoai_LayTenTL";
            SqlParameter sqlprMaTheLoai = new SqlParameter("@MaTheLoai", SqlDbType.VarChar, 15) { Value = matheloai };
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName, sqlprMaTheLoai);
            if (data == null)
                return null;
            return data.Rows[0][0].ToString();
        }

        //----------------------------------------------------------------------
        //Desc: đếm thể loại
        //----------------------------------------------------------------------
        public int DemTheLoai()
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spTheLoai_DemTL";
            object obj = DatabaseManager.DbConnection.ExecuteStoredProcedureScalar(spName);
            if (obj == null)
                return -1;

            int dem;
            try
            {
                dem = (int)obj;
            }
            catch { return -1; }
            return dem;
        }

        //----------------------------------------------------------------------
        //Desc: đếm mã thể loại
        //----------------------------------------------------------------------
        public int DemMaTheLoai(string matheloai)
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spTheLoai_DemMaTL";
            SqlParameter sqlprMaTheLoai = new SqlParameter("@MaTheLoai", SqlDbType.VarChar, 15) { Value = matheloai };
            object obj = DatabaseManager.DbConnection.ExecuteStoredProcedureScalar(spName, sqlprMaTheLoai);
            if (obj == null)
                return -1;

            int dem;
            try
            {
                dem = (int)obj;
            }
            catch { return -1; }
            return dem;
        }

        //----------------------------------------------------------------------
        //Desc: đếm số đầu sách của thể loại
        //----------------------------------------------------------------------
        public int DemSoDauSachCuaTL(string matheloai)
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spTheLoai_DemSoDauSach";
            SqlParameter sqlprMaTheLoai = new SqlParameter("@MaTheLoai", SqlDbType.VarChar, 15) { Value = matheloai };
            object obj = DatabaseManager.DbConnection.ExecuteStoredProcedureScalar(spName, sqlprMaTheLoai);
            if (obj == null)
                return -1;

            int dem;
            try
            {
                dem = (int)obj;
            }
            catch { return -1; }
            return dem;
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật thể loại
        //----------------------------------------------------------------------
        public bool CapNhat(DTOTheLoai theloai)
        {
            if (DatabaseManager.DbConnection == null)
                return false;
            string spName = "spTheLoai_CapNhatTheLoai";
            SqlParameter sqlprThaoTac = new SqlParameter("@ThaoTac", SqlDbType.Int) { Value = 1 };
            SqlParameter sqlprMaTheLoai = new SqlParameter("@MaTheLoai", SqlDbType.VarChar, 15) { Value = theloai.MaTheLoai };
            SqlParameter sqlprTenTheLoai = new SqlParameter("@TenTheLoai", SqlDbType.NVarChar, 70) { Value = theloai.TenTheLoai };
            return DatabaseManager.DbConnection.ExecuteStoredProcedureNonQuery(spName, sqlprThaoTac, sqlprMaTheLoai,
                sqlprTenTheLoai);
        }

        //----------------------------------------------------------------------
        //Desc: xóa thể loại
        //----------------------------------------------------------------------
        public bool Xoa(DTOTheLoai theloai)
        {
            if (DatabaseManager.DbConnection == null)
                return false;
            string spName = "spTheLoai_CapNhatTheLoai";
            SqlParameter sqlprThaoTac = new SqlParameter("@ThaoTac", SqlDbType.Int) { Value = 0 };
            SqlParameter sqlprMaTheLoai = new SqlParameter("@MaTheLoai", SqlDbType.VarChar, 15) { Value = theloai.MaTheLoai };
            SqlParameter sqlprTenTheLoai = new SqlParameter("@TenTheLoai", SqlDbType.NVarChar, 70) { Value = theloai.TenTheLoai };
            return DatabaseManager.DbConnection.ExecuteStoredProcedureNonQuery(spName, sqlprThaoTac, sqlprMaTheLoai,
                sqlprTenTheLoai);
        }
    }
}
